package com.yyge;

import com.yyge.dao.No1Dao;
import com.yyge.dao.No2Dao;
import com.yyge.dao.No3Dao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 *bean实例化的四种方式
 */
public class App {
    public static void main(String[] args) {
        // 创建IOC容器的时候，就已经将bean实例化并保存到IOC容器中
        // 设置bean标签中的lazy-init="true"能够让bean延迟实例化。用的时候再实例化bean
        String configPath="classpath:ApplicationContext.xml";
        ApplicationContext context=new ClassPathXmlApplicationContext(configPath);


        // 通过无参构造实例化bean
        // No1Dao no1Dao=context.getBean(No1Dao.class);
        // no1Dao.function();

        // 通过静态工厂实例化bean
        // No2Dao no2Dao=context.getBean(No2Dao.class);
        // no2Dao.function();

        // personDao是No3DaoFactory工厂的产物
        // Object personDao = context.getBean("no3Dao");
        // System.out.println(personDao);

        // personDao是PersonDaoFactoryBean工厂的产物
        Object no4Dao = context.getBean("no4Dao");
        System.out.println(no4Dao);

        // 要得到no4Dao的工厂，则可以在no4Dao的前面加&
        // Object no4DaoFactory = context.getBean("&no4Dao");
        // System.out.println(no4DaoFactory);
    }
}
